package uy.edu.ort.negocio;

import java.util.Properties;
import javax.ejb.Stateless;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.MessageProducer;
import javax.jms.ObjectMessage;
import javax.jms.Queue;
import javax.jms.Session;
import javax.naming.InitialContext;
import org.apache.log4j.Logger;
import uy.edu.ort.dominio.Noticia;

/**
 *
 * @author Leo
 */
@Stateless
public class EncoladorObjetosSB implements EncoladorObjetosSBLocal {

    static Logger logger = Logger.getLogger(EncoladorObjetosSB.class);
    
    @Override
    public boolean encolarNoticia(String cola, Noticia noticia) {
       try {
            //Seteo las Properties para el contexto 
            Properties props = new Properties();
            props.setProperty("java.naming.factory.initial",
                    "com.sun.enterprise.naming.SerialInitContextFactory");
            props.setProperty("java.naming.factory.url.pkgs", "com.sun.enterprise.naming");
            props.setProperty("java.naming.factory.state",
                    "com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl");
            props.setProperty("org.omg.CORBA.ORBInitialHost", "localhost");
            props.setProperty("org.omg.CORBA.ORBInitialPort", "3700");
            //Creo el Contexto para obtener los recursos del servidor
            InitialContext ic = new InitialContext(props);
            // Obtenemos a traves del servicio JNDI la ConnectionFactory del
            // servidor de aplicaciones
            ConnectionFactory connectionFactory = (ConnectionFactory) ic.lookup("ConnectionFactory");
            // Obtenemos a traves del servicio JNDI la "destination" que vamos
            // a utilizar, en este caso una Queue
            Queue queue = (Queue) ic.lookup(cola);
            //Creo la Connection mediante la ConnectionFactory
            Connection connection = connectionFactory.createConnection();
            //Creo la Session mediante la Connection
            Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
            //Creo la MessageProducer mediante la Session
            MessageProducer messageProducer = session.createProducer(queue);
            //Creo la TextMessage mediante la Session
            ObjectMessage objectMessage = session.createObjectMessage();
            objectMessage.setObject(noticia);
            //Envío el mensaje mediante MessageProducer
            messageProducer.send(objectMessage);
            logger.info("Se encoló: " + noticia.getTitulo() + " en la cola: " + cola);
        } catch (Exception ex) {
            logger.error("Error al encolar " + noticia.getTitulo() + " en " + cola + ". " + ex.getMessage());
            return false;
        }
        
        return true;
    }



}
